package game.controler;

import game.controler.gestionnaires.elementjeu.GestionnaireFous;
import game.controler.gestionnaires.elementjeu.GestionnaireObjets;
import game.controler.gestionnaires.splashscreen.GestionnaireSplashScreens;
import game.gui.Frame;
import game.gui.PanelJeu;
import game.gui.panelinventaire.ElementPanelInventaire;
import game.gui.panelinventaire.PanelInventaire;
import game.gui.panelvue.PanelVue;
import game.model.objets.Inventoriable;
import java.awt.Component;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Point;
import java.awt.Toolkit;

/**
 *
 * @author Gab'z
 */
public class Action {

    static {
        ControlerPanelConversation.getControlerConversation();
    }

    public static void ajouterObjetInventaire(String id) {
        if (!EtatJeu.isConversationEngagee()) {
            Inventaire.ajouterObjet(id);
            PanelInventaire.reloadPanelInventaire();
            PanelVue.reloadPanelVue();
        }
    }

    public static void retirerObjetInventaire(String id) {
        if (!EtatJeu.isConversationEngagee()) {
            Inventaire.retirerObjet(id);
            PanelInventaire.reloadPanelInventaire();
            PanelVue.reloadPanelVue();
        }
    }

    public static void ajouterFouInventaire(String id) {
        GestionnaireFous.getGfous().getFou(id).setVisible(false);
        Inventaire.ajouterFou(id);
        PanelInventaire.reloadPanelInventaire();
        PanelVue.reloadPanelVue();
    }

    public static void retirerFouInventaire(String id) {
        GestionnaireFous.getGfous().getFou(id).setVisible(false);
        Inventaire.retirerFou(id);
        PanelInventaire.reloadPanelInventaire();
        PanelVue.reloadPanelVue();
    }

    public static void commencerConversation(String idConversationSuivante) {
        System.out.println("Action commencer conversation id = " + idConversationSuivante);
        if (!EtatJeu.isConversationEngagee()) {
            PanelVue.afficherFog();
            EtatJeu.setConversationEngagee(true);
            ControlerPanelConversation.demarrerConversation(idConversationSuivante);
        }
    }

    public static void afficherConversation(String idConversationSuivante) {
        System.out.println("Action afficher conversation id = " + idConversationSuivante);
        ControlerPanelConversation.demarrerConversation(idConversationSuivante);
    }

    public static void bufferAdd(String ligne) {
        System.out.println("bufferAdd : " + ligne);
        ControlerPanelConversation.bufferAdd(ligne);
    }

    public static void setVue(String idPlanSuivant) {
        if (!EtatJeu.isConversationEngagee()) {
            PanelVue.setVue(idPlanSuivant);
            ControlerPanelConversation.cleanPanelConversation();
        }
    }

    public static void afficherInfo(String info) {
        if (!EtatJeu.isConversationEngagee()) {
            ControlerPanelConversation.afficherInfo(info);
        }
    }

    public static void clicFond() {
        if (!EtatJeu.isConversationEngagee()) {
            ControlerPanelConversation.cleanPanelConversation();
            inventaireDeselectionner();
        }
    }

    public static void inventaireSelectionner(String idInventaire, int type) {
        if (!EtatJeu.isConversationEngagee()) {
            EtatJeu.setIdSelectionne(idInventaire);
            EtatJeu.setTypeSelectionne(type);
        }
        PanelInventaire.reloadPanelInventaire();
        PanelVue.reloadPanelVue();
        Component cp = Frame.getFrame();
        Inventoriable inv;
        if (type == ElementPanelInventaire.TYPE_OBJET) {
            inv = GestionnaireObjets.getGobjets().getObjet(idInventaire);
        } else {
            inv = GestionnaireFous.getGfous().getFou(idInventaire);
        }
        Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(inv.getImgInventaire().getImage(), new Point(0, 0), "icone");
        cp.setCursor(cursor);
    }

    public static void inventaireExaminer(String idInventaire, Integer type) {
        if (!EtatJeu.isConversationEngagee()) {
            Inventoriable inv;
            if (type == ElementPanelInventaire.TYPE_OBJET) {
                inv = GestionnaireObjets.getGobjets().getObjet(idInventaire);
            } else {
                inv = GestionnaireFous.getGfous().getFou(idInventaire);
            }
            PanelVue.afficherPanelSplashScreenInventoriable(inv.getImgZoom());
            ControlerPanelConversation.afficherDescription(inv.getDescription());
        }
    }

    public static void inventaireDeselectionner() {
        EtatJeu.setIdSelectionne(null);
        EtatJeu.setTypeSelectionne(null);
        PanelInventaire.reloadPanelInventaire();
        PanelVue.reloadPanelVue();
        Frame.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }

    public static void inventaireCombiner(String idInventaire) {
        if (!EtatJeu.isConversationEngagee() && EtatJeu.isSelectionne() && EtatJeu.getTypeSelectionne() == ElementPanelInventaire.TYPE_OBJET) {
            Inventaire.combinerObjets(idInventaire, EtatJeu.getIdSelectionne());
            PanelInventaire.reloadPanelInventaire();
            PanelVue.reloadPanelVue();
        }
    }

    public static void inventaireDiscuterFou(String idInventaire) {
        if (!EtatJeu.isConversationEngagee()) {
            GestionnaireFous.getGfous().getFou(idInventaire).demarrerDiscussionInventaire();
        }
    }

    public static void removeSplashScreen() {
        EtatJeu.setClicVueAutorisé(true);
        PanelVue.removePanelSplashScreen();

    }

    public static void afficherSplashScreen(String idSplashScreen) {
        EtatJeu.setClicVueAutorisé(false);
        PanelVue.afficherPanelSplashScreenInventoriable(GestionnaireSplashScreens.getGsplashScreen().getSplashScreen(idSplashScreen).getImg());
        PanelVue.afficherSplashScreen(GestionnaireSplashScreens.getGsplashScreen().getSplashScreen(idSplashScreen));
        if (GestionnaireSplashScreens.getGsplashScreen().getSplashScreen(idSplashScreen).getDescription() != null && !"".equals(GestionnaireSplashScreens.getGsplashScreen().getSplashScreen(idSplashScreen).getDescription())) {
            ControlerPanelConversation.afficherDescription(GestionnaireSplashScreens.getGsplashScreen().getSplashScreen(idSplashScreen).getDescription());
        }
    }

    public static void fadeToBlack(String string) {
        System.out.println("fadeToBlack( " + string + " )");
        try {
            PanelJeu.fadeToBlack(string);

            //Splash splash = new PanelBlack(string);
        } catch (InterruptedException ex) {
            System.err.println("Erreur appel fadeToBlack de PanelJeu");
        }
    }

    public static void fadeIn() {
        System.out.println("fadeIn()");
        try {
            PanelJeu.fadeIn();
        } catch (InterruptedException ex) {
            System.err.println("Erreur appel fadeIn de PanelJeu");
        }
    }

    public static void setDefaultCursor() {
        Frame.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }
}
